package atguigu.service.impl;

import atguigu.dao.AccountDao;
import atguigu.pojo.Account;
import atguigu.service.AccountService;
import atguigu.utils.ConnectionManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.SQLException;

@Service
public class AccountServiceImpl implements AccountService {
    //业务层依赖持久层
    @Autowired
    private AccountDao accountDao;
    //注入数据库连接的管理类对象
    @Autowired
    private ConnectionManager connectionManager;
    /**
     * 转账的业务逻辑方法
     * 传递参数：付款人名，收款人名，转账金额
     * 转账业务流程：
     *   1 ：根据付款人的名字，查询付款人的账户信息
     *   2 ：根据收款人的名字，查询收款人的账户信息
     *   3 ：设置付款人余额 = 付款人账户中的余额-要转账的金额
     *   4 ：设置收款人余额 = 收款人账户中的余额+要转账的金额
     *   5 ：持久层更新设置后的新的余额
     */
    @Override
    public void transfer(String toName, String inName, Double money)  {
        try {
            connectionManager.begin();
            Account toAccount = accountDao.queryAccount(toName);
            Account inAccount = accountDao.queryAccount(inName);
            toAccount.setMoney(toAccount.getMoney() - money);
            inAccount.setMoney(inAccount.getMoney() + money);
            int i = accountDao.updateAccount(toAccount);
            //int c = 1/0;
            int j = accountDao.updateAccount(inAccount);
            if (i>0 && j>0){
                System.out.println("转账成功！");
            }else {
                System.out.println("转账失败！");
            }
            connectionManager.commit();
        } catch (SQLException e) {
            e.printStackTrace();
            connectionManager.rollback();
        }finally {
            connectionManager.close();
        }

    }
}
